package com.bzyd.spi;

import java.util.Iterator;
import java.util.ServiceLoader;

/**
 * Driver管理器，主要负责加载接口实例
 * Created by Xianyue Dang on 2021/8/25
 */
public class DriverManager {

    private static Driver driver = null;

    /**
     * <p>
     * ServiceLoader.load包位于java.util.ServiceLoader，
     * 它通过在ClassPath路径下的META-INF/services文件夹查找文件，自动加载文件里所定义的类。
     * 另外也可以通过Service.providers方法拿到实现类的实例，Service.providers包位于sun.misc.Service
     * </p>
     * 注册实例
     */
    public static void registerDriver() {
        ServiceLoader<Driver> load = ServiceLoader.load(Driver.class);
        Iterator<Driver> iterator = load.iterator();
        while (iterator.hasNext()) {
            if (driver == null) {
                driver = iterator.next();
            }
        }
    }

    /**
     * 获取实例
     */
    public static Driver getInstance() {
        return driver;
    }
}
